Nous sommes un groupe de 4 étudiants de
l’Université de Technologie de Troyes et, dans le cadre
de notre formation, nous réalisons un projet pour l’enseignement
“IF36 – Visualisation de données”.
Notre objectif est d’analyser un jeu de données de
notre choix de manière approfondie.
Nous avons choisi de travailler sur un jeu de données
ouvert provenant de plusieurs sources françaises, notamment
SNCF et Île-de-France Mobilités.
Ce jeu de données offre une vue détaillée du réseau de
transport ferroviaire en France, incluant :
Ce dataset nous permet de mieux comprendre les dynamiques du réseau ferré français, aussi bien en termes de régularité que de fréquentation.
Avant de pouvoir effectuer nos analyses et visualisations, nous avons dû procéder à un important travail de nettoyage des données, comprenant :
Nous avons également supprimé les données concernant les gares étrangères, afin de concentrer notre étude uniquement sur le territoire français.
Nous avons tout d’abord importé notre jeu de données à l’aide des librairies dplyr et readr.
library(dplyr)
library(readr)
# Chargement du fichier Train_dataset.csv
data_trains <- read_csv("data/Train_dataset.csv")
2. Suppression de colonnes inutiles
Certaines colonnes, contenant uniquement des commentaires textuels (“Comment (optional) delays at departure” et “Comment (optional) delays on arrival”), sont supprimées car elles ne sont pas pertinentes pour notre analyse.
# Suppression des colonnes de commentaires
data_trains <- data_trains %>%
select(-`Comment (optional) delays at departure`, -`Comment (optional) delays on arrival`)
3. Nettoyage des noms de colonnes
Pour faciliter l’utilisation du dataset, nous avons standardisé les noms de colonnes :
# Nettoyage des noms de colonnes
names(data_trains) <- gsub("\\s*\\([^)]*\\)", "", names(data_trains)) # #Retirer les parenthèses
names(data_trains) <- gsub(" ", "_", names(data_trains)) # #Remplacer les espaces par des underscores
names(data_trains) <- gsub("_$", "", names(data_trains)) # #Supprimer un underscore final inutile
4. Suppression des gares étrangères
Notre analyse portant exclusivement sur la France métropolitaine, nous avons filtré les données pour supprimer les trajets passant par certaines gares étrangères (Suisse, Allemagne, Italie, Espagne).
# Liste des gares étrangères à exclure
gares_etranger <- c("LAUSANNE", "ZURICH", "STUTTGART", "ITALIE", "GENEVE", "MADRID", "FRANCFORT")
# Filtrage des trajets
data_trains <- data_trains %>%
filter(!(Departure_station %in% gares_etranger | Arrival_station %in% gares_etranger))
5. Analyse des données manquantes
Enfin, nous avons calculé le nombre de lignes contenant au moins une valeur manquante (NA) pour évaluer la qualité globale du dataset. Nous avons également extrait ces lignes pour une éventuelle analyse plus poussée.
# Nombre de lignes avec au moins une valeur manquante
nombre_NA <- sum(rowSums(is.na(data_trains)) > 0)
nombre_NA
## [1] 106
# Extraction des lignes contenant des valeurs manquantes
data_NA <- data_trains[apply(data_trains, 1, function(x) any(is.na(x))), ]
Résultat attendu
Affichage du nombre de lignes contenant des valeurs manquantes (nombre_NA)
Création d’un sous-ensemble data_NA avec uniquement les lignes incomplètes.
Question 0
ecrire ici reponse 0
Question 1
Dans les graphes suivants : - Il est possible de zoomer sur une période précise (exemple : uniquement l’année 2019) pour mieux analyser les pics de retard. - On peut montrer/cacher certaines courbes (ex : n’afficher que les retards > 60 min). - Il y a également un pop-up interactif qui s’affiche au survol, montrant les valeurs exactes. - Certains graphiques sont actuellement affiché pour 2019.
Plus tard, avec Shiny, nous ajouterons un slider interactif pour choisir l’année dynamiquement.
Ce graphique présente la répartition des trains selon leur ponctualité :
Chaque saison est marquée par une ligne verticale pointillée et un label (“Hiver”, “Printemps”, “Été”, “Automne”).
Pas possible d’être possible à la date près (car uniquement des données du mois et pas de jours) donc on a arrondis au mois (exemple : 21 décembre -> 1er janvier pour le début de l’hiver.)
Hypothèse : influence de l’affluence estivale, vacances scolaires, travaux d’été.
Hypothèse : problèmes organisationnels en gare : gestion de flux, embarquement, correspondances, grèves.
Hypothèse : aléas pendant le trajet (accidents, incidents techniques, météo)
On détaillera cela dans une prochaine question.
Grâce aux différents graphiques réalisés, nous pouvons conclure :
Bien que l’analyse porte sur l’année 2019, les mêmes tendances générales semblent observables sur 2015–2020.
Plus tard, avec Shiny, nous créerons une application interactive qui permettra : - De filtrer dynamiquement par année, par gare, par saison, - D’explorer les retards ferroviaires plus efficacement et en temps réel.
Cela permettra de confirmer ou nuancer les tendances mises en évidence ici.
2.1 Comment la ponctualité évolue-t-elle au fil des mois ?
2.1.1 Explication du graphe
Ce graphique présente l’évolution mensuelle des retards de trains en France de 2015 à 2020.
On y observe deux informations superposées :
La ligne verte correspond au nombre de trains arrivés à l’heure chaque mois.
Les surfaces colorées empilées représentent le nombre de trains en retard, répartis selon la durée :
2.1.2 Ce qu’on observe